From 60d7c11db90bdd9f1bd1c8d26c7c44d6c0a13051 Mon Sep 17 00:00:00 2001 From: "kfraser@localhost.localdomain" Date: Mon, 11 Jun 2007 10:22:32 +0100 Subject: [PATCH] xend: Fix duplicate random MAC generation. Ensure that HVMImageHandler and NetifController see the same random MAC address. Signed-off-by: David Edmondson --- tools/python/xen/xend/XendConfig.py | 10 ++++++++-- tools/python/xen/xend/image.py | 3 +-- tools/python/xen/xend/server/netif.py | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/tools/python/xen/xend/XendConfig.py b/tools/python/xen/xend/XendConfig.py index 5ca3233709..b24a94d348 100644 --- a/tools/python/xen/xend/XendConfig.py +++ b/tools/python/xen/xend/XendConfig.py @@ -27,6 +27,7 @@ from xen.xend.XendError import VmError from xen.xend.XendDevices import XendDevices from xen.xend.PrettyPrint import prettyprintstring from xen.xend.XendConstants import DOM_STATE_HALTED +from xen.xend.server.netif import randomMAC log = logging.getLogger("xend.XendConfig") log.setLevel(logging.WARN) @@ -993,6 +994,10 @@ class XendConfig(dict): else: dev_info['driver'] = 'paravirtualised' + if dev_type == 'vif': + if not dev_info.get('mac'): + dev_info['mac'] = randomMAC() + # create uuid if it doesn't exist dev_uuid = dev_info.get('uuid', None) if not dev_uuid: @@ -1051,8 +1056,9 @@ class XendConfig(dict): dev_info = {} dev_uuid = '' if dev_type == 'vif': - if cfg_xenapi.get('MAC'): # don't add if blank - dev_info['mac'] = cfg_xenapi.get('MAC') + dev_info['mac'] = cfg_xenapi.get('MAC') + if not dev_info['mac']: + dev_info['mac'] = randomMAC() # vifname is the name on the guest, not dom0 # TODO: we don't have the ability to find that out or # change it from dom0 diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py index 527a13093b..c578057117 100644 --- a/tools/python/xen/xend/image.py +++ b/tools/python/xen/xend/image.py @@ -27,7 +27,6 @@ from xen.xend.XendConstants import REVERSE_DOMAIN_SHUTDOWN_REASONS from xen.xend.XendError import VmError, XendError, HVMRequired from xen.xend.XendLogging import log from xen.xend.XendOptions import instance as xenopts -from xen.xend.server.netif import randomMAC from xen.xend.xenstore.xswatch import xswatch from xen.xend import arch @@ -351,7 +350,7 @@ class HVMImageHandler(ImageHandler): nics += 1 mac = devinfo.get('mac') if mac is None: - mac = randomMAC() + raise VmError("MAC address not specified or generated.") bridge = devinfo.get('bridge', 'xenbr0') model = devinfo.get('model', 'rtl8139') ret.append("-net") diff --git a/tools/python/xen/xend/server/netif.py b/tools/python/xen/xend/server/netif.py index 6211e35ada..3c70b389be 100644 --- a/tools/python/xen/xend/server/netif.py +++ b/tools/python/xen/xend/server/netif.py @@ -112,7 +112,7 @@ class NetifController(DevController): typ = xoptions.netback_type if not mac: - mac = randomMAC() + raise VmError("MAC address not specified or generated.") devid = self.allocateDeviceID() -- 2.30.2